#include "QuoteService.h"
#include "log.h"
#include <QFile>
#include <QTextStream>
#include <QCoreApplication>
#include <QRandomGenerator>
#include <QDateTime>
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
#include <QStringConverter>
#endif

QuoteService::QuoteService(QObject *parent)
    : QObject(parent)
    , m_timer(new QTimer(this))
    , m_lastIndex(-1)
{
    // 加载语录
    loadQuotesFromFile();
    
    // 如果加载失败，使用默认语录
    if (m_quotes.isEmpty()) {
        initDefaultQuotes();
    }
    
    // 获取第一条语录
    m_currentQuote = getRandomQuote();
    
    // 连接定时器
    connect(m_timer, &QTimer::timeout, this, &QuoteService::onTimerTimeout);
    
    logInfo("QuoteService 初始化完成，共加载 " << m_quotes.count() << " 条语录");
}

QuoteService::~QuoteService()
{
    stopAutoChange();
}

QuoteService& QuoteService::instance()
{
    static QuoteService instance;
    return instance;
}

QString QuoteService::getCurrentQuote() const
{
    return m_currentQuote;
}

QString QuoteService::getRandomQuote()
{
    if (m_quotes.isEmpty()) {
        return "不要等待机会，而要创造机会！";
    }
    
    // 生成随机索引，避免与上次相同
    int index;
    if (m_quotes.count() > 1) {
        do {
            index = QRandomGenerator::global()->bounded(m_quotes.count());
        } while (index == m_lastIndex && m_quotes.count() > 1);
    } else {
        index = 0;
    }
    
    m_lastIndex = index;
    m_currentQuote = m_quotes[index];
    
    return m_currentQuote;
}

void QuoteService::startAutoChange(int intervalMinutes)
{
    if (intervalMinutes <= 0) {
        logWarning("无效的更换间隔: " << intervalMinutes << " 分钟");
        return;
    }
    
    // 停止现有定时器
    stopAutoChange();
    
    // 启动新的定时器
    m_timer->start(intervalMinutes * 60 * 1000);  // 转换为毫秒
    
    logInfo("语录自动更换已启动，间隔: " << intervalMinutes << " 分钟");
}

void QuoteService::stopAutoChange()
{
    if (m_timer->isActive()) {
        m_timer->stop();
        logInfo("语录自动更换已停止");
    }
}

void QuoteService::reloadQuotes()
{
    m_quotes.clear();
    loadQuotesFromFile();
    
    if (m_quotes.isEmpty()) {
        initDefaultQuotes();
    }
    
    m_currentQuote = getRandomQuote();
    emit quoteChanged(m_currentQuote);
    
    logInfo("语录已重新加载，共 " << m_quotes.count() << " 条");
}

int QuoteService::getQuoteCount() const
{
    return m_quotes.count();
}

void QuoteService::loadQuotesFromFile()
{
    // 尝试从应用程序目录加载语录文件
    QString filePath = QCoreApplication::applicationDirPath() + "/quotes.txt";
    
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        logWarning("无法打开语录文件: " << filePath);
        return;
    }
    
    QTextStream in(&file);
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
    in.setEncoding(QStringConverter::Utf8);
#else
    in.setCodec("UTF-8");
#endif
    
    while (!in.atEnd()) {
        QString line = in.readLine().trimmed();
        if (!line.isEmpty() && !line.startsWith("#")) {  // 跳过空行和注释
            m_quotes.append(line);
        }
    }
    
    file.close();
    
    logInfo("从文件加载语录: " << filePath << ", 共 " << m_quotes.count() << " 条");
}

void QuoteService::initDefaultQuotes()
{
    // 100条励志语录
    m_quotes = QStringList{
        "不要等待机会，而要创造机会！",
        "成功不是终点，失败也不是末日，继续前进的勇气才最可贵。",
        "你的努力程度决定了你人生的高度。",
        "每一个成功者都有一个开始。勇于开始，才能找到成功的路。",
        "世界上只有想不通的人，没有走不通的路。",
        "积极的人在每一次忧患中都看到一个机会。",
        "当你停止尝试时，就是失败的时候。",
        "命运掌握在自己手中，而不是在别人的嘴里。",
        "你的努力别人不一定放在眼里，但你不努力，别人一定放在心里。",
        "成功的秘诀在于永不改变既定的目标。",
        
        "只有经历过地狱般的磨练，才能炼出创造天堂的力量。",
        "坚持到底就是胜利。",
        "失败乃成功之母。",
        "今天很残酷，明天更残酷，后天很美好，但绝对大部分是死在明天晚上。",
        "路是脚踏出来的，历史是人写出来的。",
        "不为失败找理由，要为成功找方法。",
        "成功需要成本，时间也是一种成本。",
        "没有口水与汗水，就没有成功的泪水。",
        "一个人几乎可以在任何他怀有无限热忱的事情上成功。",
        "强烈的信仰会赢取坚强的人，然后又使他们更坚强。",
        
        "失败是坚韧的最后考验。",
        "只要路是对的，就不怕路远。",
        "最困难的时候，也就是离成功不远的时候。",
        "冰冻三尺，非一日之寒。",
        "知识改变命运，勤奋创造未来。",
        "行动是成功的阶梯，行动越多，登得越高。",
        "伟大的事业不是靠力气、速度和身体的敏捷完成的，而是靠性格、意志和知识的力量完成的。",
        "目标的坚定是性格中最必要的力量源泉之一。",
        "障碍与失败，是通往成功最稳靠的踏脚石。",
        "没有天生的信心，只有不断培养的信心。",
        
        "成功不会向我们走来，我们必须走向成功。",
        "时间是一个伟大的作者，它会给每个人写出完美的结局来。",
        "不要因为怕被玫瑰的刺伤到你，就不敢去摘玫瑰。",
        "命运如同手中的掌纹，无论多曲折，终掌握在自己手中。",
        "不要等待机会，而要创造机会。",
        "勤奋是你生命的密码，能译出你一部壮丽的史诗。",
        "让我们将事前的忧虑，换为事前的思考和计划吧！",
        "再长的路，一步步也能走完，再短的路，不迈开双脚也无法到达。",
        "任何业绩的质变都来自于量变的积累。",
        "成功在优点的发挥，失败是缺点的累积。",
        
        "别想一下造出大海，必须先由小河川开始。",
        "在世界的历史中，每一伟大而高贵的时刻都是某种热忱的胜利。",
        "没有哪种教育能及得上逆境。",
        "水只有碰到石头才能碰出浪花。",
        "苦想没盼头，苦干有奔头。",
        "做对的事情比把事情做对重要。",
        "智者一切求自己，愚者一切求他人。",
        "没有一种不通过蔑视、忍受和奋斗就可以征服的命运。",
        "当一个小小的心念变成行为时，便能成了习惯。",
        "自己打败自己的远远多于被别人打败的。",
        
        "只要我们能梦想的，我们就能实现。",
        "只有不断找寻机会的人才会及时把握机会。",
        "人生舞台的大幕随时都可能拉开，关键是你愿意表演，还是选择躲避。",
        "能把在面前行走的机会抓住的人，十有八九都会成功。",
        "再长的路，一步步也能走完，再短的路，不迈开双脚也无法到达。",
        "有志者自有千计万计，无志者只感千难万难。",
        "我成功因为我志在成功！",
        "再冷的石头，坐上三年也会暖。",
        "平凡的脚步也可以走完伟大的行程。",
        "有福之人是那些抱有美好的企盼从而灵魂得到真正满足的人。",
        
        "如果我们都去做自己能力做得到的事，我们会让自己大吃一惊。",
        "只有那些能耐心把简单事做得完美的人，才能获得做好困难事的本领。",
        "不是境况造就人，而是人造就境况。",
        "人之所以能，是相信能。",
        "凡真心尝试助人者，没有不帮到自己的。",
        "一个人最大的破产是绝望，最大的资产是希望。",
        "行动是治愈恐惧的良药，而犹豫、拖延将不断滋养恐惧。",
        "没有天生的信心，只有不断培养的信心。",
        "只有一条路不能选择——那就是放弃的路。",
        "忍别人所不能忍的痛，吃别人所不能吃的苦，方能收获别人所得不到的收获。",
        
        "好咖啡要和朋友一起品尝，好机会也要和朋友一起分享。",
        "生命之灯因热情而点燃，生命之舟因拼搏而前行。",
        "拥有梦想只是一种智力，实现梦想才是一种能力。",
        "只有一条路不能选择——那就是放弃的路；只有一条路不能拒绝——那就是成长的路。",
        "人的才华就如海绵的水，没有外力的挤压，它是绝对流不出来的。",
        "征服畏惧、建立自信的最快最确实的方法，就是去做你害怕的事。",
        "世上最重要的事，不在于我们在何处，而在于我们朝着什么方向走。",
        "如果我们做与不做都会有人笑，如果做不好与做得好还会有人笑，那么我们索性就做得更好，来给人笑吧！",
        "这个世界并不是掌握在那些嘲笑者的手中，而恰恰掌握在能够经受得住嘲笑与批评不断往前走的人手中。",
        "成功需要成本，时间也是一种成本，对时间的珍惜就是对成本的节约。",
        
        "行动是治愈恐惧的良药，而犹豫、拖延将不断滋养恐惧。",
        "投资知识是明智的，投资网络中的知识就更加明智。",
        "没有天生的信心，只有不断培养的信心。",
        "忍耐力较诸脑力，尤胜一筹。",
        "环境不会改变，解决之道在于改变自己。",
        "两粒种子，一片森林。",
        "每一发奋努力的背后，必有加倍的赏赐。",
        "如果你希望成功，以恒心为良友，以经验为参谋，以小心为兄弟，以希望为哨兵。",
        "大多数人想要改造这个世界，但却罕有人想改造自己。",
        "未曾失败的人恐怕也未曾成功过。",
        
        "人生伟业的建立，不在能知，乃在能行。",
        "挫折其实就是迈向成功所应缴的学费。",
        "任何的限制，都是从自己的内心开始的。",
        "忘掉失败，不过要牢记失败中的教训。",
        "不是境况造就人，而是人造就境况。",
        "含泪播种的人一定能含笑收获。",
        "靠山山会倒，靠水水会流，靠自己永远不倒。",
        "欲望以提升热忱，毅力以磨平高山。",
        "只要路是对的，就不怕路远。",
        "一滴蜂蜜比一加仑胆汁能够捕到更多的苍蝇。"
    };
    
    logInfo("使用默认语录列表，共 " << m_quotes.count() << " 条");
}

void QuoteService::onTimerTimeout()
{
    QString newQuote = getRandomQuote();
    emit quoteChanged(newQuote);
    
    logDebug("语录已自动更换: " << newQuote);
}





